package com.zjsru.plan2025.oneday;

import java.util.Arrays;

/**
 * 1706. 球会落何处
 *
 * @Author: cookLee
 * @Date: 2025-02-16
 */
public class FindBall {

    /**
     * 主
     * \
     * 输入：grid = [[1,1,1,-1,-1],[1,1,1,-1,-1],[-1,-1,-1,1,1],[1,1,1,1,-1],[-1,-1,-1,-1,-1]]
     * 输出：[1,-1,-1,-1,-1]
     * 解释：示例如图：
     * b0 球开始放在第 0 列上，最终从箱子底部第 1 列掉出。
     * b1 球开始放在第 1 列上，会卡在第 2、3 列和第 1 行之间的 "V" 形里。
     * b2 球开始放在第 2 列上，会卡在第 2、3 列和第 0 行之间的 "V" 形里。
     * b3 球开始放在第 3 列上，会卡在第 2、3 列和第 0 行之间的 "V" 形里。
     * b4 球开始放在第 4 列上，会卡在第 2、3 列和第 1 行之间的 "V" 形里。
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        FindBall findBall = new FindBall();
        int[][] grid = new int[][]{{1, 1, 1, -1, -1}, {1, 1, 1, -1, -1}, {-1, -1, -1, 1, 1}, {1, 1, 1, 1, -1}, {-1, -1, -1, -1, -1}};
        System.out.println(Arrays.toString(findBall.findBall(grid)));
    }

    public int[] findBall(int[][] grid) {
        int len = grid[0].length;
        int[] ans = new int[len];
        for (int i = 0; i < len; i++) {
            //模拟球的列运动
            int colum = i;
            for (int[] row : grid) {
                //走向，右边1，左边-1
                int dirt = row[colum];
                colum += dirt;
                // 如果球出界或者卡在 V 形，退出循环，否则继续循环（垂直落入下一排）
                // V 形就是 -1 的左边是 1，1 的右边是 -1，即 row[colum] != dirt,球水平移动一步后，遇到的 grid[i][colum] 值与移动前不同
                if (colum < 0 || colum >= len || row[colum] != dirt) {
                    colum = -1;
                    break;
                }
            }
            //记录列索引
            ans[i] = colum;
        }
        return ans;
    }
}
